//
//  main.m
//  OC09_代理设计模式
//
//  Created by dllo on 15/12/11.
//  Copyright © 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Mother.h"
#import "Teacher.h"
#import "Student.h"
#import "Doctor.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
# pragma mark - 知识点1 代理设计模式
        /** 场景
         * 委托人: mother
         * 受委托人: Teacher,Student,doctor
         * 协议: 1.看小孩 2.做饭 3.洗衣服
         
         * mother对象最终要制定一个delegate(代理人)
         * 当mother对象 执行付款方法时,代理开始执行协议中的方法
         */
    
    
    
        Mother *mother = [[Mother alloc]initWithName:@"MaMa"];
        Teacher *tea = [[Teacher alloc]initWithName:@"Petter.cao"];
        Student *stu = [[Student alloc]initWithName:@"SB"];
        Doctor *doc = [[Doctor alloc]initWithName:@"DaJiao"];
    
    /** 第一步: 母亲声明协议, 详见Mother.h文件 */
    
    /** 第二步: 母亲要声明一个属性,目的是以后指定代理人. 详见Mother.h文件*/
    
    
    /** 第三步: 受委托人签订协议. */
    
    /** 第四步: mother制定一个代理人 */
        mother.delegate = stu;
    /** 第五部: 代理人实现方法. 详见Student.m文件 */
    
    /** 第六步: 在适当的时机代理人才调用协议方法(即 照顾小孩,做饭,洗衣服)    
     * 我们选中的时机是mother付钱(方法),代理人开始执行协议方法. 详见mother类文件Paymoney方法
     */
    
        [mother payMoney];
    
    
    
        
    
    
    
    }
    return 0;
}
